{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1.用户表分析"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.1 读取用户数据 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User-ID</th>\n",
       "      <th>Location</th>\n",
       "      <th>Age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>nyc, new york, usa</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>stockton, california, usa</td>\n",
       "      <td>18.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>moscow, yukon territory, russia</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>porto, v.n.gaia, portugal</td>\n",
       "      <td>17.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>farnborough, hants, united kingdom</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   User-ID                            Location   Age\n",
       "0        1                  nyc, new york, usa   NaN\n",
       "1        2           stockton, california, usa  18.0\n",
       "2        3     moscow, yukon territory, russia   NaN\n",
       "3        4           porto, v.n.gaia, portugal  17.0\n",
       "4        5  farnborough, hants, united kingdom   NaN"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user = pd.read_csv('./data/BX-Users.csv',sep=';')\n",
    "df_user.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 修改列名"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>nyc, new york, usa</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>stockton, california, usa</td>\n",
       "      <td>18.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>moscow, yukon territory, russia</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>porto, v.n.gaia, portugal</td>\n",
       "      <td>17.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>farnborough, hants, united kingdom</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id                            location   age\n",
       "0        1                  nyc, new york, usa   NaN\n",
       "1        2           stockton, california, usa  18.0\n",
       "2        3     moscow, yukon territory, russia   NaN\n",
       "3        4           porto, v.n.gaia, portugal  17.0\n",
       "4        5  farnborough, hants, united kingdom   NaN"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user.columns = ['user_id','location','age']\n",
    "df_user.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.2 分析location"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 得到每个location特征的打分数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "location_value_counts = df_user['location'].value_counts()\n",
    "# location_value_counts"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 绘图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(\n",
    "    range(len(location_value_counts)),\n",
    "    location_value_counts,\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 每个地区的平均用户数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.863321648441723"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "location_value_counts.sum() / location_value_counts.count()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 定位location为国家"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>usa</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>usa</td>\n",
       "      <td>18.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>russia</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>portugal</td>\n",
       "      <td>17.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>united kingdom</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id        location   age\n",
       "0        1             usa   NaN\n",
       "1        2             usa  18.0\n",
       "2        3          russia   NaN\n",
       "3        4        portugal  17.0\n",
       "4        5  united kingdom   NaN"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user['location'] = df_user['location'].apply(lambda location:location.rsplit(',',maxsplit=1)[-1].strip())\n",
    "df_user.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### location的个数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "709"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(df_user['location'].unique())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### location中包含的用户数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "usa                     139711\n",
       "canada                   21658\n",
       "united kingdom           18538\n",
       "germany                  17043\n",
       "spain                    13147\n",
       "australia                11784\n",
       "italy                    11266\n",
       "                          4578\n",
       "france                    3455\n",
       "portugal                  3325\n",
       "new zealand               3097\n",
       "netherlands               3025\n",
       "switzerland               1745\n",
       "brazil                    1674\n",
       "china                     1488\n",
       "sweden                    1406\n",
       "india                     1290\n",
       "austria                   1136\n",
       "malaysia                  1119\n",
       "argentina                 1083\n",
       "singapore                  925\n",
       "finland                    923\n",
       "mexico                     840\n",
       "belgium                    819\n",
       "denmark                    805\n",
       "ireland                    753\n",
       "philippines                743\n",
       "turkey                     490\n",
       "poland                     454\n",
       "pakistan                   442\n",
       "                         ...  \n",
       "scotland\"                    1\n",
       "baxter                       1\n",
       "le madagascar                1\n",
       "afganstand holla !!          1\n",
       "somalia                      1\n",
       "kz                           1\n",
       "rosario                      1\n",
       "gb                           1\n",
       "uusa                         1\n",
       "citrus.                      1\n",
       "liaoning                     1\n",
       "rep san marino               1\n",
       "cherokee                     1\n",
       "johnson                      1\n",
       "germay                       1\n",
       "nederlands                   1\n",
       "n/a - on the road            1\n",
       "lane                         1\n",
       "catalunya(catalonia)         1\n",
       "st. clair                    1\n",
       "lleida                       1\n",
       "richmond country             1\n",
       "türkiye                      1\n",
       "galiza neghra                1\n",
       "here and there               1\n",
       "calabria                     1\n",
       "nyhamnsläge                  1\n",
       "palestine                    1\n",
       "henry                        1\n",
       "30064                        1\n",
       "Name: location, Length: 709, dtype: int64"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "location_value_counts = df_user['location'].value_counts()\n",
    "location_value_counts"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 画图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(\n",
    "    range(len(location_value_counts)),\n",
    "    location_value_counts,\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.pie(\n",
    "    location_value_counts,\n",
    "    labels = location_value_counts.index,\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.3 分析年龄"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "24.0     5687\n",
       "25.0     5618\n",
       "26.0     5547\n",
       "23.0     5456\n",
       "27.0     5383\n",
       "28.0     5347\n",
       "29.0     5293\n",
       "32.0     4781\n",
       "30.0     4778\n",
       "22.0     4714\n",
       "33.0     4699\n",
       "31.0     4665\n",
       "34.0     4656\n",
       "21.0     4438\n",
       "35.0     4194\n",
       "20.0     4056\n",
       "19.0     3950\n",
       "36.0     3896\n",
       "18.0     3703\n",
       "37.0     3582\n",
       "38.0     3404\n",
       "39.0     3234\n",
       "40.0     3142\n",
       "17.0     3044\n",
       "41.0     2919\n",
       "43.0     2816\n",
       "42.0     2758\n",
       "44.0     2745\n",
       "16.0     2570\n",
       "46.0     2526\n",
       "         ... \n",
       "239.0       1\n",
       "119.0       1\n",
       "237.0       1\n",
       "220.0       1\n",
       "231.0       1\n",
       "230.0       1\n",
       "229.0       1\n",
       "226.0       1\n",
       "128.0       1\n",
       "223.0       1\n",
       "111.0       1\n",
       "219.0       1\n",
       "109.0       1\n",
       "207.0       1\n",
       "212.0       1\n",
       "168.0       1\n",
       "201.0       1\n",
       "132.0       1\n",
       "244.0       1\n",
       "95.0        1\n",
       "189.0       1\n",
       "152.0       1\n",
       "208.0       1\n",
       "183.0       1\n",
       "172.0       1\n",
       "175.0       1\n",
       "118.0       1\n",
       "156.0       1\n",
       "159.0       1\n",
       "138.0       1\n",
       "Name: age, Length: 165, dtype: int64"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user['age'].value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 没有年龄的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>usa</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>russia</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>united kingdom</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>usa</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id        location  age\n",
       "0        1             usa  NaN\n",
       "2        3          russia  NaN\n",
       "4        5  united kingdom  NaN\n",
       "6        7             usa  NaN\n",
       "7        8          canada  NaN"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user[\n",
    "    df_user['age'].isnull()\n",
    "].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "user_id     110762\n",
       "location    110762\n",
       "age              0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user[\n",
    "    df_user['age'].isnull()\n",
    "].count()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 有年龄数据的用户占比"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "age_value_counts = df_user[\n",
    "    ~df_user['age'].isnull()\n",
    "]['age'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(\n",
    "    age_value_counts.index,\n",
    "    age_value_counts,\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "age_value_counts_sort_by_index = age_value_counts.sort_index()\n",
    "plt.plot(\n",
    "    age_value_counts_sort_by_index.index,\n",
    "    age_value_counts_sort_by_index,\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 年龄分段"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>usa</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>usa</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>russia</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>portugal</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>united kingdom</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id        location  age\n",
       "0        1             usa    0\n",
       "1        2             usa    3\n",
       "2        3          russia    0\n",
       "3        4        portugal    2\n",
       "4        5  united kingdom    0"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def divide_age(age):\n",
    "    \"\"\"\n",
    "    :return:\n",
    "        Nan,0-6,>100 --> 0 未定义正确年龄\n",
    "        7-12         --> 1 少儿\n",
    "        13-17        --> 2 青少年\n",
    "        18-45        --> 3 青年\n",
    "        46-69        --> 4 中年\n",
    "        70-100       --> 5 老年\n",
    "    \"\"\"\n",
    "    if np.isnan(age) or (age <= 6) or (age > 100):\n",
    "        return 0\n",
    "    if age >= 7 and age <= 12:\n",
    "        return 1\n",
    "    if age >= 13 and age <= 17:\n",
    "        return 2\n",
    "    if age >= 18 and age <= 45:\n",
    "        return 3\n",
    "    if age >= 46 and age <= 69:\n",
    "        return 4\n",
    "    if age >= 70 and age <= 100:\n",
    "        return 5\n",
    "df_user['age'] = df_user['age'].apply(divide_age)\n",
    "df_user.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 分析年龄占比"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.pie(\n",
    "    df_user['age'].value_counts().sort_index(),\n",
    "    labels = ['undefined','shaoer','qingshaoniannian','qingnian','zhongnian','laonian']\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2 分析打分数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User-ID</th>\n",
       "      <th>ISBN</th>\n",
       "      <th>Book-Rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>276725</td>\n",
       "      <td>034545104X</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>276726</td>\n",
       "      <td>0155061224</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>276727</td>\n",
       "      <td>0446520802</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>276729</td>\n",
       "      <td>052165615X</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>276729</td>\n",
       "      <td>0521795028</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   User-ID        ISBN  Book-Rating\n",
       "0   276725  034545104X          0.0\n",
       "1   276726  0155061224          5.0\n",
       "2   276727  0446520802          0.0\n",
       "3   276729  052165615X          3.0\n",
       "4   276729  0521795028          6.0"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rating = pd.read_csv('./data/BX-Book-Ratings.csv',sep=';')\n",
    "df_rating.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 修改列名"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>276725</td>\n",
       "      <td>034545104X</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>276726</td>\n",
       "      <td>0155061224</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>276727</td>\n",
       "      <td>0446520802</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>276729</td>\n",
       "      <td>052165615X</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>276729</td>\n",
       "      <td>0521795028</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id     item_id  rating\n",
       "0   276725  034545104X     0.0\n",
       "1   276726  0155061224     5.0\n",
       "2   276727  0446520802     0.0\n",
       "3   276729  052165615X     3.0\n",
       "4   276729  0521795028     6.0"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rating.columns = ['user_id','item_id','rating']\n",
    "df_rating.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 数据信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1149780 entries, 0 to 1149779\n",
      "Data columns (total 3 columns):\n",
      "user_id    1149780 non-null int64\n",
      "item_id    1149780 non-null object\n",
      "rating     1149772 non-null float64\n",
      "dtypes: float64(1), int64(1), object(1)\n",
      "memory usage: 26.3+ MB\n"
     ]
    }
   ],
   "source": [
    "df_rating.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 删除有误数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_rating = df_rating.dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 1149772 entries, 0 to 1149779\n",
      "Data columns (total 3 columns):\n",
      "user_id    1149772 non-null int64\n",
      "item_id    1149772 non-null object\n",
      "rating     1149772 non-null float64\n",
      "dtypes: float64(1), int64(1), object(1)\n",
      "memory usage: 35.1+ MB\n"
     ]
    }
   ],
   "source": [
    "df_rating.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.1 分析用户"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "user_value_counts = df_rating['user_id'].value_counts()\n",
    "plt.plot(\n",
    "    range(len(user_value_counts)),\n",
    "    user_value_counts,\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 分析商品"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "item_value_counts = df_rating['item_id'].value_counts()\n",
    "plt.plot(\n",
    "    range(len(item_value_counts)),\n",
    "    item_value_counts,\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 打分的类型变换成int"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>276725</td>\n",
       "      <td>034545104X</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>276726</td>\n",
       "      <td>0155061224</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>276727</td>\n",
       "      <td>0446520802</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>276729</td>\n",
       "      <td>052165615X</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>276729</td>\n",
       "      <td>0521795028</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id     item_id  rating\n",
       "0   276725  034545104X       0\n",
       "1   276726  0155061224       5\n",
       "2   276727  0446520802       0\n",
       "3   276729  052165615X       3\n",
       "4   276729  0521795028       6"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rating['rating'] = df_rating['rating'].astype(int)\n",
    "df_rating.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3 合并用户表与打分表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "      <th>item_id</th>\n",
       "      <th>rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>usa</td>\n",
       "      <td>3</td>\n",
       "      <td>0195153448</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>7</td>\n",
       "      <td>usa</td>\n",
       "      <td>0</td>\n",
       "      <td>034542252</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>0</td>\n",
       "      <td>0002005018</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>0</td>\n",
       "      <td>0060973129</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>0</td>\n",
       "      <td>0374157065</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id location  age     item_id  rating\n",
       "0        2      usa    3  0195153448       0\n",
       "1        7      usa    0   034542252       0\n",
       "2        8   canada    0  0002005018       5\n",
       "3        8   canada    0  0060973129       0\n",
       "4        8   canada    0  0374157065       0"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_data = pd.merge(\n",
    "    df_user,\n",
    "    df_rating,\n",
    "    on='user_id',\n",
    "    how='inner',\n",
    ")\n",
    "df_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 1149772 entries, 0 to 1149771\n",
      "Data columns (total 5 columns):\n",
      "user_id     1149772 non-null int64\n",
      "location    1149772 non-null object\n",
      "age         1149772 non-null int64\n",
      "item_id     1149772 non-null object\n",
      "rating      1149772 non-null int32\n",
      "dtypes: int32(1), int64(2), object(2)\n",
      "memory usage: 48.2+ MB\n"
     ]
    }
   ],
   "source": [
    "df_data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_data['age'] = df_data['age'].astype(int)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 1149772 entries, 0 to 1149771\n",
      "Data columns (total 5 columns):\n",
      "user_id     1149772 non-null int64\n",
      "location    1149772 non-null object\n",
      "age         1149772 non-null int32\n",
      "item_id     1149772 non-null object\n",
      "rating      1149772 non-null int32\n",
      "dtypes: int32(2), int64(1), object(2)\n",
      "memory usage: 43.9+ MB\n"
     ]
    }
   ],
   "source": [
    "df_data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 打分最活跃的location"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "usa               768068\n",
       "canada            103782\n",
       "united kingdom     50593\n",
       "germany            39673\n",
       "                   27575\n",
       "australia          26477\n",
       "spain              25741\n",
       "france             13877\n",
       "n/a                13638\n",
       "italy              12147\n",
       "Name: location, dtype: int64"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "location_value_counts = df_data['location'].value_counts()\n",
    "location_value_counts[:10]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 4 保存合并后的矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [],
   "source": [
    "import _pickle as cPickle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "cPickle.dump(df_data,open('...','wb'))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
